/*
 * lists.h
 *
 *  Created on: Feb 17, 2011
 *      Author: s126135
 */

#ifndef LIST_H_
#define LIST_H_

#include <pthread.h>

typedef struct _list_element {
	int key;
	void* element;
	struct _list_element* next;
} list_element;

typedef struct {
	int size;
	list_element* head;
	list_element* tail;
	pthread_mutex_t mutex;
	int external_lock;
} list;

list* list_new();
void list_free(list* lista);
int list_size(list* lista);
void list_add(list* lista, void* element, int key);
void* list_get(list* lista, int index);
void* list_get_key(list* lista, int key);
void* list_remove(list* lista, int index);
void* list_remove_key(list* lista, int key);
void* list_remove_element(list* lista, void* element);
void list_lock(list* lista);
void list_unlock(list* lista);

#endif /* LISTS_H_ */
